问题一:启用监听收不到过期时间消息,原因是未开启配置
解决办法是 在redis配置文件内开启 notify-keyspace-events Ex或者在redis命令行 redis-cli 使用命令:
config set notify-keyspace-events Ex
问题二:PredisConnectionConnectionException : Error while reading line from the server
原因是Redis默认链接时间未60秒,在database.php设置read_write_timeout为0即可。
"read_write_timeout"=>0
问题三:ERR only (P)SUBSCRIBE / (P)UNSUBSCRIBE / QUIT allowed in this context
这个是因为一个Redis链接使用监听时,无法使用其他命令。需要重新建立一个链接。期初我使用 new \Predis\Client(),一直报错,我也不知道为啥。然后我想到了使用集群,使用相同配置。将监听事件设置为单独实例。具体操作如下:
//datebase.php配置页面
'redis' => [
'client' => 'predis',
'default' => [
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => 0,
"queue" => '{default}',//queue站点默认走的redis
],
'publisher' => [ //redis 订阅监听
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => 0,
"read_write_timeout"=>0,//长连接不要断
],
]
//监听页面
//__keyevent@*__:expired监听过期消息
$redis=Redis::connection('publisher');//创建新的实例
$redis->psubscribe(['__keyevent@*__:expired'], function ($message, $channel) {
echo $message;
Redis::set('aa','123');//这样就不会报错了。这里使用的是default的,是两个redis链接。
});
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。